{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Numpy实现浅层神经网络\n",
    "\n",
    "\n",
    "实践部分将搭建神经网络，包含一个隐藏层，实验将会展现出与Logistic回归的不同之处。\n",
    "\n",
    "实验将使用两层神经网络实现对“花”型图案的分类，如图所示，图中的点包含红点（y=0）和蓝点（y=1）还有点的坐标信息，实验将通过以下步骤完成对两种点的分类，使用Numpy实现。\n",
    "\n",
    "- 输入样本；\n",
    "\n",
    "- 搭建神经网络；\n",
    "\n",
    "- 初始化参数；\n",
    "\n",
    "- 训练，包括前向传播与后向传播（即BP算法）；\n",
    "\n",
    "- 得出训练后的参数；\n",
    "\n",
    "- 根据训练所得参数，绘制两类点边界曲线。\n",
    "\n",
    "<img src=\"image/data.png\" style=\"width:400px;height:300px;\">\n",
    "\n",
    "该实验将使用Python原生库实现两层神经网络的搭建，完成分类。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 - 引用库\n",
    "\n",
    "首先，载入几个需要用到的库，它们分别是：\n",
    "- numpy：一个python的基本库，用于科学计算\n",
    "- planar_utils：定义了一些工具函数\n",
    "- matplotlib.pyplot：用于生成图，在验证模型准确率和展示成本变化趋势时会使用到\n",
    "- sklearn：用于数据挖掘和数据分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import sklearn\n",
    "from planar_utils import plot_decision_boundary, sigmoid, load_planar_dataset, load_extra_datasets\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "np.random.seed(1) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 - 载入数据并观察纬度\n",
    "\n",
    "载入数据后，输出维度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The shape of X is: (2, 320)\n",
      "The shape of Y is: (1, 320)\n"
     ]
    }
   ],
   "source": [
    "#载入数据\n",
    "train_x, train_y, test_x, test_y = load_planar_dataset()\n",
    "#输出维度\n",
    "shape_X = train_x.shape\n",
    "shape_Y = train_y.shape\n",
    "print ('The shape of X is: ' + str(shape_X))\n",
    "print ('The shape of Y is: ' + str(shape_Y))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由输出可知每组输入坐标包含两个值，包含一个值，共320组数据（测试集在训练集基础上增加80组数据，共400组）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 - 简单逻辑回归实验\n",
    "\n",
    "使用逻辑回归处理该数据，观察分类结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/starwe/Desktop/WorkDir/anaconda/lib/python3.6/site-packages/sklearn/utils/validation.py:526: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of logistic regression:57 % (percentage of correctly labelled datapoints)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x103b0a5f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#训练逻辑回归分类器\n",
    "clf = sklearn.linear_model.LogisticRegressionCV();\n",
    "clf.fit(train_x.T, train_y.T);\n",
    "#绘制逻辑回归分类边界\n",
    "plot_decision_boundary(lambda x: clf.predict(x), train_x, train_y)\n",
    "plt.title(\"Logistic Regression\")\n",
    "\n",
    "#输出准确率\n",
    "LR_predictions = clf.predict(train_x.T)\n",
    "print ('Accuracy of logistic regression:%d ' % float((np.dot(train_y,LR_predictions) + np.dot(1-train_y,1-LR_predictions))/float(train_y.size)*100) +\n",
    "       '% ' + \"(percentage of correctly labelled datapoints)\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出逻辑回归效果并不好，这是因为逻辑回归网络结构只包含输入层和输出层，无法拟合更为复杂的模型，下面尝试神经网络模型。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4 - 神经网络模型\n",
    "\n",
    "下面开始搭建神经网络模型，我们采用两层神经网络实验，隐藏层包含4个节点，使用tanh激活函数；输出层包含一个节点，使用Sigmoid激活函数，结果小于0.5即认为是0，否则认为是1。\n",
    "\n",
    "** 神经网络结构 **\n",
    "\n",
    "下面用代码实现神经网络结构，首先确定神经网络的结构，即获取相关数据维度，并设置隐藏层节点个数（本实验设置4个隐藏层节点），用以初始化参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义各层规模函数\n",
    "def layer_sizes(X, Y):\n",
    "    \"\"\"\n",
    "    参数含义:\n",
    "    X -- 输入的数据\n",
    "    Y -- 输出值\n",
    "    \n",
    "    返回值:\n",
    "    n_x -- 输入层节点数\n",
    "    n_h -- 隐藏层节点数\n",
    "    n_y -- 输出层节点数\n",
    "    \"\"\"\n",
    "    \n",
    "    n_x = X.shape[0] #输入层大小（节点数）\n",
    "    n_h = 4\n",
    "    n_y = Y.shape[0] #输出层大小（节点数）\n",
    "    return (n_x, n_h, n_y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** 初始化模型参数 **\n",
    "\n",
    "获取相关维度信息后，开始初始化参数，定义相关函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 定义函数：初始化参数\n",
    "\n",
    "def initialize_parameters(n_x, n_h, n_y):\n",
    "    \"\"\"\n",
    "    参数:\n",
    "    n_x -- 输入层大小\n",
    "    n_h -- 隐藏层大小\n",
    "    n_y -- 输出层大小\n",
    "    \n",
    "    返回值:\n",
    "    params -- 一个包含所有参数的python字典:\n",
    "                    W1 -- （隐藏层）权重，维度是 (n_h, n_x)\n",
    "                    b1 -- （隐藏层）偏移量，维度是 (n_h, 1)\n",
    "                    W2 -- （输出层）权重，维度是 (n_y, n_h)\n",
    "                    b2 -- （输出层）偏移量，维度是 (n_y, 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    np.random.seed(2) # 设置随机种子\n",
    "    \n",
    "    #随机初始化参数\n",
    "    W1 = np.random.randn(n_h, n_x) * 0.01\n",
    "    b1 = np.zeros((n_h, 1))\n",
    "    W2 = np.random.randn(n_y, n_h) * 0.01\n",
    "    b2 = np.zeros((n_y, 1))\n",
    "    \n",
    "    \n",
    "    assert (W1.shape == (n_h, n_x))\n",
    "    assert (b1.shape == (n_h, 1))\n",
    "    assert (W2.shape == (n_y, n_h))\n",
    "    assert (b2.shape == (n_y, 1))\n",
    "    \n",
    "    parameters = {\"W1\": W1,\n",
    "                  \"b1\": b1,\n",
    "                  \"W2\": W2,\n",
    "                  \"b2\": b2}\n",
    "    \n",
    "    return parameters\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** 前向传播与后向传播 **\n",
    "\n",
    "获取输入数据，参数初始化完成后，可以开始前向传播的计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 定义函数：前向传播\n",
    "\n",
    "def forward_propagation(X, parameters):\n",
    "    \"\"\"\n",
    "    参数:\n",
    "    X -- 输入值 \n",
    "    parameters -- 一个python字典，包含计算所需全部参数（是initialize_parameters函数的输出）    \n",
    "    返回值:\n",
    "    A2 -- 模型输出值\n",
    "    cache -- 一个字典，包含 \"Z1\", \"A1\", \"Z2\" and \"A2\"\n",
    "    \"\"\"\n",
    "    \n",
    "    W1 = parameters[\"W1\"]\n",
    "    b1 = parameters[\"b1\"]\n",
    "    W2 = parameters[\"W2\"]\n",
    "    b2 = parameters[\"b2\"]\n",
    "    \n",
    "    #计算中间量和节点值    \n",
    "    Z1 = np.dot(W1, X) + b1\n",
    "    A1 = np.tanh(Z1)\n",
    "    Z2 = np.dot(W2, A1) + b2\n",
    "    A2 = 1/(1+np.exp(-Z2))\n",
    "    \n",
    "    \n",
    "    assert(A2.shape == (1, X.shape[1]))\n",
    "    \n",
    "    cache = {\"Z1\": Z1,\n",
    "             \"A1\": A1,\n",
    "             \"Z2\": Z2,\n",
    "             \"A2\": A2}\n",
    "    \n",
    "    return A2, cache"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "前向传播最后可得出模型输出值（即代码中的A2），即可计算成本函数cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 定义函数：成本函数\n",
    "\n",
    "def compute_cost(A2, Y, parameters):\n",
    "    \"\"\"\n",
    "   根据第三章给出的公式计算成本\n",
    "    \n",
    "    参数:\n",
    "A2 -- 模型输出值    \n",
    "Y -- 真实值\n",
    "    parameters -- 一个python字典包含参数 W1, b1, W2和b2\n",
    "    \n",
    "    返回值:\n",
    "    cost -- 成本函数\n",
    "    \"\"\"\n",
    "    \n",
    "    m = Y.shape[1] #样本个数\n",
    "\n",
    "    #计算成本\n",
    "    logprobs = np.multiply(np.log(A2), Y) + np.multiply(np.log(1 - A2), 1 - Y)\n",
    "    cost =  -1. / m * np.sum(logprobs)\n",
    "    \n",
    "    cost = np.squeeze(cost)     # 确保维度的正确性                        \n",
    "    assert(isinstance(cost, float))\n",
    "    \n",
    "    return cost"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算了成本函数，可以开始后向传播的计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 定义函数：后向传播\n",
    "\n",
    "def backward_propagation(parameters, cache, X, Y):\n",
    "    \"\"\"    \n",
    "    参数:\n",
    "    parameters -- 一个python字典，包含所有参数 \n",
    "    cache -- 一个python字典包含\"Z1\", \"A1\", \"Z2\"和\"A2\".\n",
    "    X -- 输入值\n",
    "    Y -- 真实值\n",
    "    \n",
    "    返回值:\n",
    "    grads -- 一个python字典包含所有参数的梯度\n",
    "    \"\"\"\n",
    "    m = X.shape[1]\n",
    "  \n",
    "    #首先从\"parameters\"获取W1,W2\n",
    "    W1 = parameters[\"W1\"]\n",
    "    W2 = parameters[\"W2\"]\n",
    "        \n",
    "    # 从\"cache\"中获取A1,A2\n",
    "    A1 = cache[\"A1\"]\n",
    "    A2 = cache[\"A2\"]\n",
    "    \n",
    "    #后向传播: 计算dW1, db1, dW2, db2. \n",
    "    dZ2 = A2 - Y\n",
    "    dW2 = 1. / m * np.dot(dZ2, A1.T)\n",
    "    db2 = 1. / m * np.sum(dZ2, axis = 1, keepdims = True)\n",
    "    dZ1 = np.dot(W2.T, dZ2) * (1 - np.power(A1, 2))\n",
    "    dW1 = 1. / m * np.dot(dZ1, X.T)\n",
    "    db1 = 1. / m * np.sum(dZ1, axis = 1, keepdims = True)\n",
    "    \n",
    "    grads = {\"dW1\": dW1,\n",
    "             \"db1\": db1,\n",
    "             \"dW2\": dW2,\n",
    "             \"db2\": db2}\n",
    "    \n",
    "    return grads"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过后向传播获取梯度后，可以根据梯度下降公式更新参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def update_parameters(parameters, grads, learning_rate = 1.2):\n",
    "    \"\"\"\n",
    "    使用梯度更新参数\n",
    "    \n",
    "    参数:\n",
    "    parameters -- 包含所有参数的python字典 \n",
    "    grads -- 包含所有参数梯度的python字典 \n",
    "    \n",
    "    返回值:\n",
    "    parameters -- 包含更新后参数的python \n",
    "    \"\"\"\n",
    "    #从\"parameters\"中读取全部参数\n",
    "    W1 = parameters[\"W1\"]\n",
    "    b1 = parameters[\"b1\"]\n",
    "    W2 = parameters[\"W2\"]\n",
    "    b2 = parameters[\"b2\"]\n",
    "    \n",
    "    # 从\"grads\"中读取全部梯度\n",
    "    dW1 = grads[\"dW1\"]\n",
    "    db1 = grads[\"db1\"]\n",
    "    dW2 = grads[\"dW2\"]\n",
    "    db2 = grads[\"db2\"]\n",
    "    \n",
    "    #更新参数\n",
    "    W1 = W1 - learning_rate * dW1\n",
    "    b1 = b1 - learning_rate * db1\n",
    "    W2 = W2 - learning_rate * dW2\n",
    "    b2 = b2 - learning_rate * db2\n",
    "    \n",
    "    parameters = {\"W1\": W1,\n",
    "                  \"b1\": b1,\n",
    "                  \"W2\": W2,\n",
    "                  \"b2\": b2}\n",
    "    \n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** 神经网络模型 **\n",
    "\n",
    "前向传播、成本函数计算和后向传播构成一个完整的神经网络，将上述函数组合，构建一个神经网络模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义函数：神经网络模型\n",
    "def nn_model(X, Y, n_h, num_iterations = 10000, print_cost=False):\n",
    "    \"\"\"\n",
    "    参数:\n",
    "    X -- 输入值\n",
    "    Y -- 真实值\n",
    "    n_h -- 隐藏层大小/节点数\n",
    "    num_iterations -- 训练次数\n",
    "    print_cost -- 设置为True，则每1000次训练打印一次成本函数值\n",
    "    \n",
    "    返回值:\n",
    "parameters -- 训练结束，更新后的参数值    \n",
    "\"\"\"\n",
    "    \n",
    "    np.random.seed(3)\n",
    "    n_x = layer_sizes(X, Y)[0]\n",
    "    n_y = layer_sizes(X, Y)[2]\n",
    "    \n",
    "    #根据n_x, n_h, n_y初始化参数，并取出W1,b1,W2,b2   \n",
    "    parameters = initialize_parameters(n_x, n_h, n_y)\n",
    "    W1 = parameters[\"W1\"]\n",
    "    b1 = parameters[\"b1\"]\n",
    "    W2 = parameters[\"W2\"]\n",
    "    b2 = parameters[\"b2\"]\n",
    "    \n",
    "    \n",
    "    for i in range(0, num_iterations):      \n",
    "       \n",
    "        #前向传播， 输入: \"X, parameters\". 输出: \"A2, cache\".\n",
    "        A2, cache = forward_propagation(X, parameters)\n",
    "        \n",
    "        #成本计算. 输入: \"A2, Y, parameters\". 输出: \"cost\".\n",
    "        cost = compute_cost(A2, Y, parameters)\n",
    " \n",
    "        #后向传播， 输入: \"parameters, cache, X, Y\". 输出: \"grads\".\n",
    "        grads = backward_propagation(parameters, cache, X, Y)\n",
    " \n",
    "        #参数更新. 输入: \"parameters, grads\". 输出: \"parameters\".\n",
    "        parameters = update_parameters(parameters, grads)\n",
    "        \n",
    "        #每1000次训练打印一次成本函数值\n",
    "        if print_cost and i % 1000 == 0:\n",
    "            print (\"Cost after iteration %i: %f\" %(i, cost))\n",
    "\n",
    "    return parameters\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** 预测 ** \n",
    "\n",
    "通过上述模型可以训练得出最后的参数，此时需检测其准确率，用训练后的参数预测训练的输出，大于0.5的值视作1，否则视作0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义函数：预测\n",
    "def predict(parameters, X):\n",
    "    \"\"\"\n",
    "    使用训练所得参数，对每个训练样本进行预测\n",
    "    \n",
    "    参数:\n",
    "    parameters -- 保安所有参数的python字典 \n",
    "    X -- 输入值\n",
    "    \n",
    "    返回值：\n",
    "    predictions -- 模型预测值向量(红色: 0 / 蓝色: 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    #使用训练所得参数进行前向传播计算，并将模型输出值转化为预测值（大于0.5视作1，即True）\n",
    "    A2, cache = forward_propagation(X, parameters)\n",
    "    predictions = A2 > 0.5\n",
    "\n",
    "    return predictions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面对获取的数据进行训练，并输出准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after iteration 0: 0.693049\n",
      "Cost after iteration 1000: 0.272304\n",
      "Cost after iteration 2000: 0.261430\n",
      "Cost after iteration 3000: 0.260627\n",
      "Cost after iteration 4000: 0.257842\n",
      "Cost after iteration 5000: 0.255809\n",
      "Cost after iteration 6000: 0.254249\n",
      "Cost after iteration 7000: 0.253019\n",
      "Cost after iteration 8000: 0.252028\n",
      "Cost after iteration 9000: 0.251208\n",
      "Train Accuracy: 90%\n",
      "Test Accuracy: 89%\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12201cb70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#建立神经网络模型\n",
    "parameters = nn_model(train_x, train_y, n_h = 4, num_iterations = 10000, print_cost=True)\n",
    "\n",
    "#绘制分类边界\n",
    "plot_decision_boundary(lambda x: predict(parameters, x.T), train_x, train_y)\n",
    "plt.title(\"Decision Boundary for hidden layer size \" + str(4))\n",
    " \n",
    "predictions = predict(parameters, train_x)\n",
    "# 预测训练集\n",
    "print('Train Accuracy: %d' % float((np.dot(train_y, predictions.T) +\n",
    "                                    np.dot(1 - train_y, 1 - predictions.T)) /\n",
    "                                    float(train_y.size) * 100) + '%')\n",
    "# 预测测试集\n",
    "predictions = predict(parameters, test_x)\n",
    "print('Test Accuracy: %d' % float((np.dot(test_y, predictions.T) +\n",
    "                                    np.dot(1 - test_y, 1 - predictions.T)) /\n",
    "                                    float(test_y.size) * 100) + '%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对比逻辑回归47%的准确率和分类结果图，神经网络分类的结果提高了不少，这是因为神经网络增加的隐藏层，为模型训练提供了更多选择，使得神经网络能拟合更加复杂的模型，对于更加复杂的图案分类更加准确。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
